package m1;

import com.rabbitmq.client.*;

import javax.security.auth.callback.Callback;
import java.io.IOException;

/*
    2022/1/20
    10:17
*/public class Consumer {
    public static void main(String[] args) throws Exception{
        //链接服务器
        ConnectionFactory f = new ConnectionFactory();
        f.setHost("192.168.64.140");
        f.setPort(5672); //5672用来收发消息 ，15672是管理控制台
        f.setUsername("admin");
        f.setPassword("admin");

        Connection connection = f.newConnection();
        Channel channel = connection.createChannel();

        //定义队列
        //如果队列在服务器已经存在，不会重复创建
        channel.queueDeclare("HelloWorld!",false,false,false,null);

        //创建回调对象，用来处理消息
        DeliverCallback callback = new DeliverCallback() {
            @Override
            public void handle(String consumerTag, Delivery message) throws IOException {
                String msg = new String(message.getBody(), "UTF-8");
                System.out.println("收到消息:"+msg);
            }
        };
        //此对象用来处理无法处理的数据
        CancelCallback cancelCallback = new CancelCallback() {
            @Override
            public void handle(String consumerTag) throws IOException {

            }
        };
        //开始接收消息，把消息传递给回调对象进行处理
        //autoAck:是否自动确认 手动确认会缓存消息，如果消费者处理数据失败，缓存消息回滚，可以防止消息丢失。
        channel.basicConsume("HelloWorld!",true,callback,cancelCallback);
    }
}
